package com.ruoyi.framework.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import com.ruoyi.common.constant.Constants;

/**
 * 资源文件配置加载
 * 国际化配置类，用于配置系统多语言支持相关组件
 *
 * @author ruoyi
 */
@Configuration
public class I18nConfig implements WebMvcConfigurer {

    /**
     * 配置区域解析器
     * 用于解析客户端请求的区域信息，确定使用哪种语言环境
     * 通过Session存储区域信息，实现用户语言偏好的持久化
     *
     * @return LocaleResolver 区域解析器实例
     */
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        // 默认语言
        slr.setDefaultLocale(Constants.DEFAULT_LOCALE);
        return slr;
    }

    /**
     * 配置区域变更拦截器
     * 用于拦截请求中的语言参数，动态切换系统语言
     * 当请求中包含lang参数时，自动切换到对应的语言环境
     *
     * @return LocaleChangeInterceptor 区域变更拦截器实例
     */
    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        // 参数名
        lci.setParamName("lang");
        return lci;
    }

    /**
     * 添加拦截器到注册表
     * 将区域变更拦截器注册到Spring MVC拦截器链中
     * 使系统能够处理语言切换请求
     *
     * @param registry 拦截器注册表，用于注册各种拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

